﻿using System;
using System.Collections.Generic;
using System.Linq;
using GestionEducativa.Models;


namespace GestionEducativa.DataLayer
{
    public class UsuarioRepository
    {
        //Objeto de la base de datos en general
        //Este objeto contiene todos los objetos contenidos en la base de datos
        Gestion_EducativaEntities ObjectContext = new Gestion_EducativaEntities();

        //Este metodo se encargar de hacer una consulta en la base de datos
        //en base a un nombre de usuario, el cual devuelve el registro completo del usuario 
        //y encaso de no encontrar el usuario especifico delvolvera un usuario null
        /// <summary>
        /// Obtiene el registro completo de un usuario en base a su nombre.
        /// </summary>
        /// <param name="userName"></param>
        /// <returns>UserClass</returns>
        /// 
        public UsuarioViewModel ObtenerUsuario(string userName)
        {
            Usuario useobt = ObjectContext.Usuario.FirstOrDefault(u => u.usuario == userName);

            UsuarioViewModel usuario = new UsuarioViewModel();
            
            if (useobt == null)
            {
                usuario.Usuario = null;
                usuario.Contraseña = null;
                usuario.Rol = 0;
                usuario.Estado = false;
                usuario.Numeroemp = 0;
            }
            else
            {
                usuario.Usuario = useobt.usuario;
                usuario.Contraseña = useobt.contrasena;
                usuario.Rol = Convert.ToInt32(useobt.idrol);
                usuario.Estado = useobt.estado;
                usuario.Numeroemp = useobt.noemp;
            }

            return
                usuario;
        }
        public UsuarioViewModel ObtenerUsuario(int numemp)
        {
            Usuario useobt = ObjectContext.Usuario.FirstOrDefault(u => u.noemp == numemp);

            UsuarioViewModel usuario = new UsuarioViewModel();

            if (useobt == null)
            {
                usuario.Usuario = null;
                usuario.Contraseña = null;
                usuario.Rol = 0;
                usuario.Estado = false;
                usuario.Numeroemp = 0;
            }
            else
            {
                usuario.Usuario = useobt.usuario;
                usuario.Contraseña = useobt.contrasena;
                usuario.Rol = Convert.ToInt32(useobt.idrol);
                usuario.Estado = useobt.estado;
                usuario.Numeroemp = useobt.noemp;
            }

            return
                usuario;
        }


        public void InsertarUsuario(Usuario user)
        {
            ObjectContext.AddToUsuario(user);
            ObjectContext.SaveChanges();
        }     

        public void ActualizarUsuario(Usuario user)
        {
            Usuario u = (from ux in ObjectContext.Usuario where ux.noemp == user.noemp select ux).First();
            u.contrasena = user.contrasena;
            u.idrol = user.idrol;
  
            ObjectContext.SaveChanges();
        }

        public Usuario TraerUsuario(int noemp)
        {
            Usuario u = (from ux in ObjectContext.Usuario where ux.noemp == noemp select ux).First();
            return u;
            
        }

        public IEnumerable<Usuario> TraerUsuariosActivos()
        {
            IEnumerable<Usuario> Usergroup = (from usx in ObjectContext.Usuario where usx.estado == true select usx).AsEnumerable();
            return Usergroup;
 
        }

        public IEnumerable<Usuario> TraerUsuariosInactivos()
        {
            IEnumerable<Usuario> Usergroup = (from usx in ObjectContext.Usuario where usx.estado == false select usx).AsEnumerable();
            return Usergroup;

        }

        public IEnumerable<Usuario> TraerTodosUsuarios()
        {
            IEnumerable<Usuario> Usergroup = (from usx in ObjectContext.Usuario  select usx).AsEnumerable();
            return Usergroup;

        }
        

        public bool HabilitacionUsuario(int noemp)
        {
            string comprobar = string.Empty;
            Usuario emp = (from empx in ObjectContext.Usuario where empx.noemp == noemp select empx).First();
            if (emp.estado)
            { emp.estado = false; comprobar = "D"; }

            else
            { emp.estado = true;  }

            ObjectContext.SaveChanges();

            if (comprobar == "D")
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        public IEnumerable<string> NumeroEmpleadoU()
        {
            List<string> numeroemp = new List<string>();

            foreach (Usuario u in ObjectContext.Usuario)
            {
                numeroemp.Add(u.noemp.ToString());
            }

            return
                numeroemp.AsEnumerable<string>();
        }        
    }
}